package org.lestr.secuel.noyau.systemeLogique;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;

import org.lestr.secuel.m3ds.Univers;


public class SystemeLogique implements Serializable {

	
	// Déclaration de constantes
	private static final long serialVersionUID = 1L;

	
	// Déclaration des attributs
	private Collection<Regle> règles;
	private Univers univers;
	public Collection<SystemeLogiqueEcouteur> écouteurs;
	
	
	// Constructeur
	public SystemeLogique(Univers univers){
	
		// Instanciation des attributs
		règles = new ArrayList<Regle>();
		this.univers = univers;
		écouteurs = new ArrayList<SystemeLogiqueEcouteur>();
		
	}// FIN Constructeur
	
	
	/** Ajoute une règle au système logique */
	public void ajoutRègle(Regle règle){
	
		// Ajoute
		règles.add(règle);
		
		// Prévient les écouteurs
		for(SystemeLogiqueEcouteur écouteur : écouteurs)
			écouteur.règleAjoutée(this, règle);
		
	}// FIN ajoutRègle
	
	
	/** Retire une règle du système logique */
	public void retraitRègle(Regle règle){
		
		// Retire
		règles.remove(règle);
		
		// Prévient les écouteurs
		for(SystemeLogiqueEcouteur écouteur : écouteurs)
			écouteur.règleRetirée(this, règle);
		
	}// FIN retraitRègle
	
	
	/** Retourne les règles du système logiques */
	public Iterable<Regle> getRègles(){
		
		return règles;
		
	}// FIN retRègles
	
	
	// Accesseurs
	public Univers getUnivers() {
		return univers;
	}
	
	
	// Déléguées
	public boolean ajoutEcouteur(SystemeLogiqueEcouteur o) {
		return écouteurs.add(o);
	}
	public boolean retraitEcouteur(Object o) {
		return écouteurs.remove(o);
	}
	
	
	
}// FIN Classe
